package org.dizena.utils;

import org.apache.commons.lang3.StringUtils;

import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class ObjectUtil
{
    /**
     * 对象基本属性-转map，不可包含对象类型、数组；
     */
    public static Map<String, Object> formObjectToMap(Object obj) throws IllegalAccessException
    {
        Map<String, Object> map = new HashMap<>();
        Class<?> clazz = obj.getClass();
        for (Field field : clazz.getDeclaredFields())
        {
            field.setAccessible(true);
            boolean isStatic = Modifier.isStatic(field.getModifiers());
            if (!isStatic)
            {
                String fieldName = field.getName();
                Object value = field.get(obj);
                if (value != null && StringUtils.isNotEmpty(value.toString()))
                {
                    map.put(fieldName, value);
                }
            }
        }
        return map;
    }

    /**
     * 生成N位数字,n<8
     */
    public static String makeNumberStr(int n)
    {
        // n传入的参数是要生成的数字位数
        int[] num = {1, 2, 3, 5, 6, 7, 8, 9, 0};// 从这个数组中随机取出<=9个数字
        int[] keep = new int[9];// 创建一个整数数组保存随机数字

        for (int i = num.length - 1; i >= 0; i--)
        {
            int k = (int) (Math.random() * i);// 生成的k值0～8
            keep[i] = num[k];// 取得数组前面的 10－i 个的其中一个值
            num[k] = num[i];// 将生成不到的数组值替换已经生成的数组值
            num[i] = keep[i];// 已经生成的放入再也生成不到的地方
        }
        int[] nn = new int[n];// 创建一个输入参数大小的数组
        nn = Arrays.copyOf(keep, n);// 取得随机数组的 需要的n个元素
        String str = "";
        for (int i = 0; i < nn.length; i++)
        {
            str += nn[i];
        }
        return str;
    }

    /**
     * 将字符串以特定的分隔符解析成线性表
     */
    public static List<String> str2List(String str, String regex)
    {
        List<String> lists = new ArrayList<String>();
        if (StringUtils.isNotEmpty(str))
        {
            String ss[] = str.split(regex);
            if (ss.length > 0)
            {
                for (int i = 0; i < ss.length; i++)
                {
                    if (StringUtils.isNotEmpty(ss[i])) lists.add(ss[i]);
                }
            }
        }
        return lists;
    }

    public static boolean checkEmail(String email)
    {
        if (StringUtils.isEmpty(email))
        {
            return false;
        }
        String regEx1 = "^([a-z0-9A-Z]+[-|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$";
        Pattern p = Pattern.compile(regEx1);
        Matcher m = p.matcher(email);
        if (m.matches())
        {
            return true;
        }
        return false;
    }

    public static boolean checkMobile(String mobile)
    {
        Pattern p = Pattern.compile("^[1](([3-9][\\d])|([4][5,6,7,8,9])|([6][5,6])|([7][3,4,5,6,7,8])|([9][8,9]))[\\d]{8}$");
        if (p.matcher(mobile).matches())
        {
            return true;
        }
        return false;
    }


}
